package dj.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface BaseDao<T> {

	/**
	 * 保存方法
	 * 
	 * @param t
	 * @return
	 */
	public Serializable save(T t);

	/**
	 * 更新对象
	 * 
	 * @param t
	 */
	public void update(T t);

	/**
	 * 删除对象
	 * 
	 * @param t
	 */
	public void delete(T t);

	/**
	 * 插入或更新对象
	 * 
	 * @param t
	 */
	public void saveOrUpdate(T t);

	/**
	 * 获得一个对象
	 * 
	 * @param c
	 *            对象类型
	 * @param id
	 * @return
	 */
	public T get(Class<T> c, Serializable id);

	/**
	 * 根据hql查询 无参数
	 * 
	 * @param hql
	 * @return
	 */
	public T get(String hql);

	/**
	 * 根据hql查询 有参数 例如 ： from User u where u.name = :name and u.pwd = :pwd
	 * 
	 * @param hql
	 * @param params
	 * @return
	 */
	public T get(String hql, Map<String, Object> params);

	/**
	 * 根据hql获取结果数量
	 * 
	 * @param hql
	 * @return
	 */
	public Long getCount(String hql);

	/**
	 * 获取结果数量，带参数
	 * 
	 * @param hql
	 * @param param
	 * @return
	 */
	public Long getCount(String hql, Map<String, Object> params);

	/**
	 * 查询集合
	 * 
	 * @param hql
	 * @return
	 */
	public List<T> find(String hql);

	/**
	 * 查询集合，带参数
	 * 
	 * @param hql
	 * @param params
	 * @return
	 */
	public List<T> find(String hql, Map<String, Object> params);

	/**
	 * 分页查询，无参数
	 * 
	 * @param hql
	 * @param page
	 * @param rows
	 * @return
	 */
	public List<T> find(String hql, int page, int rows);

	/**
	 * 分页查询，有参数
	 * 
	 * @param hql
	 * @param params
	 * @param page
	 * @param rows
	 * @return
	 */
	public List<T> find(String hql, Map<String, Object> params, int page, int rows);

	/**
	 * 执行无参hql
	 * 
	 * @param hql
	 * @return
	 */
	public int executeHql(String hql);

	/**
	 * 执行有参hql
	 * 
	 * @param hql
	 * @param params
	 * @return
	 */
	public int executeHql(String hql, Map<String, Object> params);

	/**
	 * 插入操作日志
	 * 
	 * @param t
	 * @param operateType
	 *            操作类型
	 */
	public void setLog(T t, String operateType);

}
